Skip to main content

7. tex / gfx:82 条 unsupported

以下 82 条(tex 47 + gfx 35)编码已冻结、语义模型未实现:依赖尚未实现的纹理模型与光栅 / tile memory 模型。功能模型当前把它们按"未实现单元"处理——执行报 IllegalInsn(cause 1)。下表与 §6 同格式;tex 行的公共语义前缀:坐标自 rs1 起按 dim 消耗;显式参数按 bias/lod/grad/compare/sample 顺序排列;返回值按 dmask 置位顺序写入,rsd=1 追加 residency dword。

编码与布局要点(T 格式,64 位):

  • dim:1d/2d/3d/cube/1darray/2darray/cubearray/2dms/2dmsarray/buffer;dmask 4 位选返回分量;a16/d16 选 16 位坐标/数据;voff 启用每 lane 同维度整数偏移;toff 为三组有符号 4-bit texel 偏移;rsd=1 时最后追加 residency dword(0 = resident)。
  • 坐标布局(勘误 v0.1.1):坐标自 rs1 起,按 dim 消耗连续向量寄存器(1D: x;2D: x,y;3D: x,y,z;array 追加 layer;cube 用方向向量、face/layer 按硬件定义);显式 LOD、bias、梯度、比较值、MSAA sample index 紧随坐标,变体固定顺序 bias/lod/grad/compare/sample;返回值从 rd 起按 dmask 置位顺序连续写入。
  • 描述符:image 为 udesc8(rs2 起),sampler 为 udesc4(rs3 起;fetch/query 无采样器);采样器与 image 描述符存于 uniform 文件,非一致索引由编译器 waterfall。
  • fragment 输入约定:v0 packed 像素 xy(各 16 位)、v1 coverage、v2 sample id/front-facing、v3 primitive id;插值读 setup 产生的平面系数,needs_wqm 保证完整 quad。tile 记录以 32 位 dword 编址,toff7 为记录内 4 字节偏移。
  • 开放问题:插值系数的物理存放位置与格式未定(不改变 v0.1 编码)。

7.1 tex.sample 族(10 条)​

助记符操作数编码延迟语义标志
tex.samplerd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x0async:tex隐式 LOD 采样(需要 whole-quad 模式)ld db sp wqm
tex.sample.brd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x1async:tex隐式 LOD 采样 + biasld db sp wqm
tex.sample.lrd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x2async:tex显式 LOD 采样ld db sp
tex.sample.lzrd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x3async:texLOD = 0 采样ld db sp
tex.sample.drd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x4async:tex显式梯度采样ld db sp
tex.sample.crd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x5async:tex深度比较采样,隐式 LODld db sp wqm
tex.sample.c.brd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x6async:tex深度比较采样 + biasld db sp wqm
tex.sample.c.lrd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x7async:tex深度比较采样,显式 LODld db sp
tex.sample.c.lzrd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x8async:tex深度比较采样,LOD 0ld db sp
tex.sample.c.drd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x9async:tex深度比较采样,显式梯度ld db sp

7.2 gather / fetch / query(7 条)​

助记符操作数编码延迟语义标志
tex.gather4rd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0xaasync:tex单分量 gather(dmask one-hot;2x2 footprint)ld db sp
tex.gather4.crd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0xbasync:tex深度比较 gatherld db sp
tex.fetchrd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0xcasync:tex整数坐标 + mip 级 texel 读取(2dms 用 sample index)ld db sp
tex.query.lodrd:v rs1:v rs2:d8^8 rs3:d4^4 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0xdasync:tex返回采样所用 (钳位后 LOD, 未钳位 LOD)ld db sp wqm
tex.query.sizerd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0xeasync:tex返回 mip 层 s1 的尺寸 (w, h, d/层数)ld db sp
tex.query.levelsrd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0xfasync:tex返回 mip 层数ld db sp
tex.query.samplesrd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x29 f5=0x10async:tex返回采样数ld db sp

7.3 image 读写(2 条)​

助记符操作数编码延迟语义标志
img.loadrd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x0async:tex格式化读取(null 描述符 / 越界 → 0)ld db sp
img.storerd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x1async:vst格式化写入(null / 越界丢弃)st db

7.4 image 原子(28 条)​

助记符操作数编码延迟语义标志
img.atom.add.u32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x2async:vst图像原子:M[A] = M[A] + data(整数坐标 s1..)at db
img.atom.add.u32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x10async:tex图像原子:M[A] = M[A] + data(整数坐标 s1..);旧值返回 rdat db
img.atom.sub.u32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x3async:vst图像原子:M[A] = M[A] - data(整数坐标 s1..)at db
img.atom.sub.u32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x11async:tex图像原子:M[A] = M[A] - data(整数坐标 s1..);旧值返回 rdat db
img.atom.min.i32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x4async:vst图像原子:M[A] = min_s(M[A], data)(整数坐标 s1..)at db
img.atom.min.i32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x12async:tex图像原子:M[A] = min_s(M[A], data)(整数坐标 s1..);旧值返回 rdat db
img.atom.max.i32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x5async:vst图像原子:M[A] = max_s(M[A], data)(整数坐标 s1..)at db
img.atom.max.i32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x13async:tex图像原子:M[A] = max_s(M[A], data)(整数坐标 s1..);旧值返回 rdat db
img.atom.min.u32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x6async:vst图像原子:M[A] = min_u(M[A], data)(整数坐标 s1..)at db
img.atom.min.u32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x14async:tex图像原子:M[A] = min_u(M[A], data)(整数坐标 s1..);旧值返回 rdat db
img.atom.max.u32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x7async:vst图像原子:M[A] = max_u(M[A], data)(整数坐标 s1..)at db
img.atom.max.u32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x15async:tex图像原子:M[A] = max_u(M[A], data)(整数坐标 s1..);旧值返回 rdat db
img.atom.and.b32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x8async:vst图像原子:M[A] = M[A] & data(整数坐标 s1..)at db
img.atom.and.b32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x16async:tex图像原子:M[A] = M[A] & data(整数坐标 s1..);旧值返回 rdat db
img.atom.or.b32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x9async:vst图像原子:M[A] = M[A] | data(整数坐标 s1..)at db
img.atom.or.b32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x17async:tex图像原子:M[A] = M[A] | data(整数坐标 s1..);旧值返回 rdat db
img.atom.xor.b32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0xaasync:vst图像原子:M[A] = M[A] ^ data(整数坐标 s1..)at db
img.atom.xor.b32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x18async:tex图像原子:M[A] = M[A] ^ data(整数坐标 s1..);旧值返回 rdat db
img.atom.xchg.b32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0xbasync:vst图像原子:M[A] = data(交换)(整数坐标 s1..)at db
img.atom.xchg.b32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x19async:tex图像原子:M[A] = data(交换)(整数坐标 s1..);旧值返回 rdat db
img.atom.cmpxchg.b32rd:v^2 rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0xcasync:vst图像原子:if M[A] == data0: M[A] = data1(比较交换)(整数坐标 s1..)at db
img.atom.cmpxchg.b32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x1aasync:tex图像原子:if M[A] == data0: M[A] = data1(比较交换)(整数坐标 s1..);旧值返回 rdat db
img.atom.inc.u32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0xdasync:vst图像原子:M[A] = (old >= data) ? 0 : old + 1(整数坐标 s1..)at db
img.atom.inc.u32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x1basync:tex图像原子:M[A] = (old >= data) ? 0 : old + 1(整数坐标 s1..);旧值返回 rdat db
img.atom.dec.u32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0xeasync:vst图像原子:M[A] = (old == 0 || old > data) ? data : old - 1(整数坐标 s1..)at db
img.atom.dec.u32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x1casync:tex图像原子:M[A] = (old == 0 || old > data) ? data : old - 1(整数坐标 s1..);旧值返回 rdat db
img.atom.fadd.f32rd:v rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0xfasync:vst图像原子:M[A] = M[A] + data(binary32,固定 RNE)(整数坐标 s1..)at db opt
img.atom.fadd.f32.rtnrd:v* rs1:v rs2:d8^8 dim:dim dmask:u4 voff:u1 rsd:u1 a16:u1 d16:u1 toff:t12T op opcode=0x2d f5=0x1dasync:tex图像原子:M[A] = M[A] + data(binary32,固定 RNE)(整数坐标 s1..);旧值返回 rdat db opt

7.5 fragment interlock(2 条)​

助记符操作数编码延迟语义标志
interlock.begin-SYS op opcode=0x4e f5=0x7fixed:1等待更早片段(按图元顺序)对本 warp 像素执行 interlock.endei sy fo
interlock.end-SYS op opcode=0x4e f5=0x8fixed:1释放本 warp 像素给后续片段(有序 interlock)ei sy fo

7.6 插值(12 条)​

助记符操作数编码延迟语义标志
interp.persp.centerrd:v rs2:at7R op opcode=0x54 f4=0x0async:ls透视正确插值 @ 像素中心fo
interp.persp.centroidrd:v rs2:at7R op opcode=0x54 f4=0x1async:ls透视正确插值 @ 覆盖采样质心fo
interp.persp.samplerd:v rs2:at7R op opcode=0x54 f4=0x2async:ls透视正确插值 @ 当前采样点(sample-rate shading)fo
interp.persp.offsetrd:v rs1:v^2 rs2:at7R op opcode=0x54 f4=0x3async:ls透视正确插值 @ 中心 + (s1, s1+1) f32 偏移fo
interp.persp.atsamplerd:v rs1:v rs2:at7R op opcode=0x54 f4=0x4async:ls透视正确插值 @ 采样索引 s1fo
interp.linear.centerrd:v rs2:at7R op opcode=0x54 f4=0x5async:ls屏幕线性插值(noperspective)@ 像素中心fo
interp.linear.centroidrd:v rs2:at7R op opcode=0x54 f4=0x6async:ls屏幕线性插值 @ 覆盖采样质心fo
interp.linear.samplerd:v rs2:at7R op opcode=0x54 f4=0x7async:ls屏幕线性插值 @ 当前采样点fo
interp.linear.offsetrd:v rs1:v^2 rs2:at7R op opcode=0x54 f4=0x8async:ls屏幕线性插值 @ 中心 + (s1, s1+1) f32 偏移fo
interp.linear.atsamplerd:v rs1:v rs2:at7R op opcode=0x54 f4=0x9async:ls屏幕线性插值 @ 采样索引 s1fo
interp.flatrd:v rs2:at7R op opcode=0x54 f4=0xaasync:ls常量系数 C(provoking 顶点)fo
interp.coefrd:v^3 rs2:at7R op opcode=0x54 f4=0xbasync:ls返回属性槽原始平面系数 A, B, C(3 个寄存器)fo

7.7 重心坐标(6 条)​

助记符操作数编码延迟语义标志
bary.persp.centerrd:v^2R1 op opcode=0x56 f11=0x0async:lsd, d+1 = 透视重心坐标 (b1, b2) @ 像素中心;b0 = 1-b1-b2fo
bary.persp.centroidrd:v^2R1 op opcode=0x56 f11=0x1async:ls透视重心坐标 @ 质心fo
bary.persp.samplerd:v^2R1 op opcode=0x56 f11=0x2async:ls透视重心坐标 @ 当前采样fo
bary.linear.centerrd:v^2R1 op opcode=0x56 f11=0x3async:ls线性重心坐标 @ 像素中心fo
bary.linear.centroidrd:v^2R1 op opcode=0x56 f11=0x4async:ls线性重心坐标 @ 质心fo
bary.linear.samplerd:v^2R1 op opcode=0x56 f11=0x5async:ls线性重心坐标 @ 当前采样fo

7.8 coverage / sample mask(2 条)​

助记符操作数编码延迟语义标志
cov.getrd:vR1 op opcode=0x56 f11=0x6fixed:2d = 当前像素 coverage 掩码(逐 sample 位;早期 Z 与 smask.and 之后)fo
smask.andrs1:vR1 op opcode=0x56 f11=0x7fixed:2coverage[lane] &= s1(清零的 lane 变为 helper)fo

7.9 helper / live / demote(4 条)​

助记符操作数编码延迟语义标志
demoters1:uU1 op opcode=0x58 f13=0x0fixed:2(u1 & EXEC) 内 lane 变 helper:清 coverage、抑制 store/atomic/tile 写,继续执行供导数fo ei re
discardrs1:uU1 op opcode=0x58 f13=0x1fixed:2(u1 & EXEC) 内 lane 终止:清 coverage 并移出 LIVE(编译器还须清 EXEC)fo ei re
helper.getrd:uU1 op opcode=0x58 f13=0x2fixed:2U[d] = helper lane 掩码fo ei
live.getrd:uU1 op opcode=0x58 f13=0x3fixed:2U[d] = LIVE 掩码(未 discard 的 lane,含 helper)fo ei

7.10 tile memory(6 条)​

助记符操作数编码延迟语义标志
tile.ld.b32rd:v rs1:v rs2:t7R op opcode=0x5a f4=0x0async:lsd = TILE[像素(lane), sample s1, 偏移 off]fo ld
tile.ld.b64rd:v^2 rs1:v rs2:t7R op opcode=0x5a f4=0x1async:ls2 dword tile 读取fo ld
tile.ld.b128rd:v^4 rs1:v rs2:t7R op opcode=0x5a f4=0x2async:ls4 dword tile 读取fo ld
tile.st.b32rd:v rs1:v rs2:t7R op opcode=0x5a f4=0x3async:lsTILE[像素(lane), s1 掩码内的 sample, off] = d(helper 抑制)fo st
tile.st.b64rd:v^2 rs1:v rs2:t7R op opcode=0x5a f4=0x4async:ls2 dword tile 写入(s1 掩码内 sample)fo st
tile.st.b128rd:v^4 rs1:v rs2:t7R op opcode=0x5a f4=0x5async:ls4 dword tile 写入(s1 掩码内 sample)fo st

7.11 depth / stencil(3 条)​

助记符操作数编码延迟语义标志
zs.test.zrd:v rs1:vR op opcode=0x5c f4=0x0async:ls后期深度测试/写入(shader 深度 s1);d = 存活 coverage 掩码fo
zs.test.srd:v rs2:vR op opcode=0x5c f4=0x1async:ls后期模板测试/写入(参考值 s2);d = 存活 coverage 掩码fo
zs.test.zsrd:v rs1:v rs2:vR op opcode=0x5c f4=0x2async:ls后期深度(s1)+ 模板参考(s2)测试/写入;d = 存活 coverage 掩码fo